#ifndef MSG_H
#define MSG_H

#define CARAMA_MSG_TYPE 1
#define LED_MSG_TYPE 2
#define LCD_MSG_TYPE 3
#define MSG_MAX_LENGTH 10


// 不同的格式不一样 此时
#define MIN(x,y) ({\
    typeof(x) _x = x;\
    typeof(y) _y = y;\
    _x > _y ? _y : _x;\
})
enum CARAMA_MSG {
    CARAMA_FROMAT_CHANGE=1,     // 想要转换格式
    CARAMA_CAPTURE_FRAME,       // 捕捉到一帧
    CARAMA_STATE_CHANGE,        // 暂停或者是开始采集
    CARAMA_FROMAT_480,
    CARAMA_FROMAT_360,
    CARAMA_FROMAT_144,
    
};
enum LED_MSG {
    LED0_STATE_CHANGE = 1,
    LED0_ON,
    LED0_OFF,
    LED1_STATE_CHANGE,
    LED1_ON,
    LED1_OFF,
    LED2_STATE_CHANGE,
    LED2_ON,
    LED2_OFF,
};
enum LCD_MSG {
    PIC_CONVERT_FINISH = 1,   // 计算线程完成了一张图片的格式转换
    LCD_FLUSH_READY,          // lcd该刷新了
    LCD_TEXT_CHANGE,         // 文本该修改了

};

struct msg_type {
    union
    {
        enum CARAMA_MSG carama_msg;
        enum LED_MSG   led_msg;
        enum LCD_MSG   lcd_msg;
    };  
    char msg_buffer[MSG_MAX_LENGTH];
    unsigned char msg_length;
};

struct carama_msg {
    unsigned int width;
    unsigned int height;
    unsigned int real_size;
};

struct msg {
    unsigned long type;
    struct msg_type detail_msg;
};


#endif